> ## Documentation Index
> Fetch the complete documentation index at: https://sequence-0fb8d9e6-api_docs.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

# Unreal Currency Swaps

> Documentation for Unreal SDK overview for the Sequence infrastructure stack for web3 gaming.

Swapping between different ERC20/native token currencies on a given Chain is made easy by Sequence's Smart Swap API.

Please make sure that your token pair has enough liquidity on a supported exchange such as UniSwap.
Checkout this guide on [how to add liquidity on UniSwap.](https://support.uniswap.org/hc/en-us/articles/7423194619661-How-to-add-liquidity-to-Uniswap-v3)

## Get Swap Price

Query the swap price for a given token pair.

<Tabs>
  <Tab title="Blueprint">
    <Frame>
      <img src="https://mintcdn.com/sequence-0fb8d9e6-api_docs/auazpVRK2iFuGS6h/images/unreal/get_swap_price.png?fit=max&auto=format&n=auazpVRK2iFuGS6h&q=85&s=4a7255f18d94e2bb19beb5de7724d264" width="2074" height="1104" data-path="images/unreal/get_swap_price.png" />
    </Frame>
  </Tab>

  <Tab title="C++">
    ```cpp theme={null}
    const TSuccessCallback<FSeqSwapPrice> OnApiSuccess = [this, OnSuccess](const FSeqSwapPrice& Response) { };
    const FFailureCallback OnApiFailure = [this, OnFailure](const FSequenceError& Error) { };

    USequencePay* Pay = NewObject<USequencePay>();
    Pay->GetSwapPrice(SequenceSdk::GetChainId(), WalletAddress, SellCurrency, BuyCurrency, BuyAmount, OnApiSuccess, OnApiFailure);
    ```
  </Tab>
</Tabs>

## Get Swap Prices

Query swap prices for the token your user wants to receive.

<Tabs>
  <Tab title="Blueprint">
    <Frame>
      <img src="https://mintcdn.com/sequence-0fb8d9e6-api_docs/auazpVRK2iFuGS6h/images/unreal/get_swap_prices.png?fit=max&auto=format&n=auazpVRK2iFuGS6h&q=85&s=029efb7241bb1d1c86d7c67dd60b133f" width="2074" height="1104" data-path="images/unreal/get_swap_prices.png" />
    </Frame>
  </Tab>

  <Tab title="C++">
    ```cpp theme={null}
    const TSuccessCallback<TArray<FSeqSwapPrice>> OnApiSuccess = [this, OnSuccess](const TArray<FSeqSwapPrice>& Response) { };
    const FFailureCallback OnApiFailure = [this, OnFailure](const FSequenceError& Error) { };

    USequencePay* Pay = NewObject<USequencePay>();
    Pay->GetSwapPrices(SequenceSdk::GetChainId(), WalletAddress, BuyCurrency, BuyAmount, OnApiSuccess, OnApiFailure);
    ```
  </Tab>
</Tabs>

## Get Swap Quote

After checking the swap price, get your approval and transaction data needed to build your transaction.
Make sure you only define `Sell Amount` or `Buy Amount` and not both.

<Tabs>
  <Tab title="Blueprint">
    <Frame>
      <img src="https://mintcdn.com/sequence-0fb8d9e6-api_docs/auazpVRK2iFuGS6h/images/unreal/get_swap_quote.png?fit=max&auto=format&n=auazpVRK2iFuGS6h&q=85&s=82c3bf7c9ae7adf08cc8fe35110db8e9" width="2182" height="1224" data-path="images/unreal/get_swap_quote.png" />
    </Frame>
  </Tab>

  <Tab title="C++">
    ```cpp theme={null}
    const TSuccessCallback<FSeqSwapQuote> OnApiSuccess = [this, OnSuccess](const FSeqSwapQuote& Response) { };
    const FFailureCallback OnApiFailure = [this, OnFailure](const FSequenceError& Error) { };

    USequencePay* Pay = NewObject<USequencePay>();
    Pay->GetSwapQuote(SequenceSdk::GetChainId(), WalletAddress, BuyCurrency, SellCurrency, BuyAmount, SellAmount, IncludeApprove, OnApiSuccess, OnApiFailure);
    ```
  </Tab>
</Tabs>

## Get Supported Swap Chains

Returns the list of chains supported for swapping.

<Tabs>
  <Tab title="Blueprint">
    <Frame>
      <img src="https://mintcdn.com/sequence-0fb8d9e6-api_docs/uFPNPaUQoWqBdCiH/images/unreal/supported_swap_chains.png?fit=max&auto=format&n=uFPNPaUQoWqBdCiH&q=85&s=41bcbee552001428a844378c5026c3f8" width="1726" height="930" data-path="images/unreal/supported_swap_chains.png" />
    </Frame>
  </Tab>

  <Tab title="C++">
    ```cpp theme={null}
    const TSuccessCallback<FSeqGetLifiChainsResponse> OnApiSuccess = [this, OnSuccess](const FSeqGetLifiChainsResponse& Response) { };
    const FFailureCallback OnApiFailure = [this, OnFailure](const FSequenceError& Error) { };

    USequencePay* Pay = NewObject<USequencePay>();
    Pay->GetSupportedSwapChains(OnApiSuccess, OnApiFailure);
    ```
  </Tab>
</Tabs>

## Get Supported Swap Tokens

Returns the list of tokens supported for swapping.

<Tabs>
  <Tab title="Blueprint">
    <Frame>
      <img src="https://mintcdn.com/sequence-0fb8d9e6-api_docs/uFPNPaUQoWqBdCiH/images/unreal/supported_swap_tokens.png?fit=max&auto=format&n=uFPNPaUQoWqBdCiH&q=85&s=ad89fab7e450950f1a4fdaed24dc09a1" width="1726" height="930" data-path="images/unreal/supported_swap_tokens.png" />
    </Frame>
  </Tab>

  <Tab title="C++">
    ```cpp theme={null}
    const TSuccessCallback<FSeqGetLifiTokensResponse> OnApiSuccess = [this, OnSuccess](const FSeqGetLifiTokensResponse& Response) { };
    const FFailureCallback OnApiFailure = [this, OnFailure](const FSequenceError& Error) { };

    USequencePay* Pay = NewObject<USequencePay>();
    Pay->GetSupportedSwapTokens(Args, OnApiSuccess, OnApiFailure);
    ```
  </Tab>
</Tabs>
